package cn.cdu.medical.service;

import cn.cdu.medical.dto.PrescriptionDTO;
import cn.cdu.medical.entity.Prescription;
import cn.cdu.medical.vo.PrescriptionVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

public interface IPrescriptionService extends IService<Prescription> {
    
    /**
     * 创建处方
     * @param prescriptionDTO 处方信息
     * @return 处方ID
     */
    String createPrescription(PrescriptionDTO prescriptionDTO);
    
    /**
     * 获取处方详情
     * @param id 处方ID
     * @return 处方详情
     */
    PrescriptionVO getPrescriptionDetail(String id);
    
    /**
     * 分页查询处方列表
     * @param page 分页参数
     * @param patientId 患者ID
     * @param doctorId 医生ID
     * @param status 处方状态
     * @return 处方列表
     */
    IPage<PrescriptionVO> getPrescriptionPage(Page<PrescriptionVO> page, String patientId, String doctorId, Integer status);
    
    /**
     * 更新处方状态
     * @param id 处方ID
     * @param status 状态
     * @return 是否成功
     */
    boolean updatePrescriptionStatus(String id, Integer status);
    
    /**
     * 作废处方
     * @param id 处方ID
     * @return 是否成功
     */
    boolean invalidatePrescription(String id);

    /**
     * 根据ID查询处方详情
     *
     * @param id 处方ID
     * @return 处方详情
     */
    PrescriptionVO getPrescriptionById(String id);

    /**
     * 新增处方
     *
     * @param prescription 处方信息
     * @return 处方ID
     */
    String addPrescription(Prescription prescription);

    /**
     * 根据病历ID获取处方列表
     * @param medicalRecordId 病历ID
     * @return 处方列表
     */
    List<PrescriptionVO> getPrescriptionsByMedicalRecordId(String medicalRecordId);

    /**
     * 修改处方
     * @param prescriptionDTO 处方信息
     * @return 是否成功
     */
    boolean updatePrescription(PrescriptionDTO prescriptionDTO);
} 